//#pragma comment(linker,"/STACK:16777216") /*16Mb*/
//#pragma comment(linker,"/STACK:33554432") /*32Mb*/
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<numeric>
#include<sstream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<memory>
#include<string>
#include<vector>
#include<cctype>
#include<list>
#include<queue>
#include<deque>
#include<stack>
#include<map>
#include<set>
#include<algorithm>
using namespace std;

typedef unsigned long long      ui64;
typedef long long               i64;
typedef	vector<int>             VI;
typedef	vector<bool>            VB;
typedef	vector<VI>              VVI;
typedef	vector<string>          VS;
typedef	pair<int,int>           PII;
typedef map<string,int>         MSI;
typedef set<int>                SI;
typedef set<string>             SS;
typedef map<int,int>            MII;
typedef	pair<double,double>     PDD;

#define PB                      push_back
#define MP                      make_pair
#define X                       first
#define Y                       second
#define FOR(i, a, b)            for(int i = (a); i < (b); ++i)
#define RFOR(i, a, b)           for(int i = (a) - 1; i >= (b); --i)
#define CLEAR(a, b)             memset(a, b, sizeof(a))
#define SZ(a)                   int((a).size())
#define ALL(a)                  (a).begin(), (a).end()
#define RALL(a)                 (a).rbegin(), (a).rend()
#define INF                     (2000000000)


int main()
{
	int n; cin >> n;
	vector<PII> a(n);
	int sum  = 0;
	FOR(i,0,n) {
		scanf("%d",&a[i].X);
		a[i].Y = i;
		sum += a[i].X;
	}
	
	sort(RALL(a));
	VI ans(30010,-1);
	int next_free = 0;
	int max_free = 1;
	FOR(i,0,n) {
		FOR(j,0,a[i].X) {
			ans[ next_free ] = a[i].Y+1;
			next_free += 2;
		}
		if( next_free > max_free )
			swap(next_free, max_free);
	}
	VI res;
	bool bx = 0;
	int what = -1;
	FOR(i,0,30010) {
		if( ans[i]==-1 ) {
			bx = true;
			continue;
		}
		if( bx )
			what = ans[i];
		else
			res.PB(ans[i]);
		//cout << ans[i] << " ";
	}/*
	if( SZ(res)-sum ) {
		while(next_free!=-47)
			max_free++;
	}*/
	int bad = sum - SZ(res);
	FOR(i,0,SZ(res)) {
		printf("%d%c",res[i],i==SZ(res)-1?' ':' ');
		if(res[i]!=what && (i==SZ(res)-1 || res[i+1]!=what) && bad) {
			cout << what << " ";
			bad--;
		}
	}
	FOR(i,0,bad)
		cout << what << " ";
    return 0;
}